//package com.taoshen.java_mongo;
//
//import cn.hutool.core.collection.CollUtil;
//import cn.hutool.core.date.DateUtil;
//import cn.hutool.core.date.TimeInterval;
//import cn.hutool.core.lang.Dict;
//import cn.hutool.core.lang.PatternPool;
//import cn.hutool.core.map.MapUtil;
//import com.mongodb.Block;
//import com.mongodb.MongoClient;
//import com.mongodb.client.FindIterable;
//import com.mongodb.client.MongoCollection;
//import com.mongodb.client.model.Filters;
//import org.bson.Document;
//import org.junit.After;
//import org.junit.Before;
//import org.junit.Test;
//
//import java.util.List;
//import java.util.Map;
//import java.util.regex.Pattern;
//import java.util.stream.IntStream;
//
///**
// * @Description
// * @Author Zhang Litao
// * @Date 2021/11/1 13:29
// */
//public class JavaMongoTest2 {
//    private MongoClient mongoClient;
//
//    MongoCollection<Document> t_user;
//
//    @Before
//    public void before() {
//        mongoClient = new MongoClient("taotaoyongyuanbusi.top",27017);
//        t_user = mongoClient.getDatabase("ems").getCollection("t_user");
//    }
//
//    /**
//     * 带上设置条件的查询
//     */
//    @Test
//    public void test1() {
//        // 查询全部 不带形参条件
//        FindIterable<Document> documents = t_user.find();
//
//
//        // 直接形参构造Document
////        Document document = new Document("name", "zhangsan");
//        // 设置一个Map形参 键值对put进去
////        Document document = new Document(new Dict().set("name", "zhangsan"));
//
//        // new出Document 再put进去 Document类是继承Map的
//        Document document = new Document();
//        document.put("name", "zhangwuji16");
//        document.put("age", 16);
//        FindIterable<Document> documents1 = t_user.find(document);
//        documents1.forEach((Block<? super Document>) System.out::println);
//    }
//
//
//    /**
//     * 只查询出指定字段
//     */
//    @Test
//    public void test2() {
//        Document document = new Document();
//        document.put("name","zhangwuji16");
//
//        Document bson = new Document();
//        bson.put("age", 18);
//
//        FindIterable<Document> documents = t_user.find(document).projection(bson);
//        for (Document document1 : documents) {
//            System.out.println(document1);
//        }
//    }
//
//
//    /**
//     * 查询数据取值范围
//     * 条件搜索 $lt/ $lte / $gt / $gte / $ne / $eq <====> < / <= / >  /  >=  /  != /==
//     */
//    @Test
//    public void test3() {
//        // Filters可以理解成过滤器适配对象 返回一个JSON对象
//        FindIterable<Document> documents = t_user.find()
//                .filter(Filters.lte("age", 24));
//
//        documents.forEach((Block<? super Document>) System.out::println);
//    }
//
//    /**
//     * 条件搜索OR查询$in
//     */
//    @Test
//    public void test4() {
//        // 筛选出年龄是 24 25 26的记录
//        FindIterable<Document> documents = t_user.find().filter(Filters.in("age", 24, 25, 26));
//
//        documents.forEach((Block<? super Document>) System.out::println);
//    }
//
//    /**
//     * 条件搜索OR查询$or
//     * 如果是多个条件and查找  那只需要一个Document对象 再put多个键值对即可
//     */
//    @Test
//    public void test5() {
//        // 设置两个Document作为or的两个查询条件
//        Document document1 = new Document("name", "zhangwuji23");
//        Document document2 = new Document("age", 24);
//
//        t_user.find().filter(Filters.or(document1, document2)).forEach((Block<? super Document>) System.out::println);
//    }
//
//
//    /**
//     * 模糊查询 对查询条件的键值对的值搞成Pattern即可
//     */
//    @Test
//    public void test6() {
//        // 设置条件的值 搞成Pattern即可
//        Document document = new Document("name", Pattern.compile("wuji"));
//
//        t_user.find(document).forEach((Block<? super Document>) System.out::println);
//    }
//
//    /**
//     * null值的处理
//     */
//    @Test
//    public void test7() {
//        Document document = new Document("name", null);
//
//        t_user.find(document).forEach((Block<? super Document>) System.out::println);
//    }
//
//    /**
//     *查询数组 数组中定义多个内容  查询某个字段包含所有内容的记录
//     */
//    @Test
//    public void test8() {
//        t_user.find().filter(Filters.all("name", new String[]{"zhangwuji6"}))
//                .forEach((Block<? super Document>) System.out::println);
//    }
//
//    /**
//     * 根据某字段进行排序 设置排序规则的键值对的值 一定要是1或者-1
//     */
//    @Test
//    public void test9() {
//        // 升序
//        t_user.find().sort(new Document("age", 1)).forEach((Block<? super Document>) System.out::println);
//        // 降序
//        t_user.find().sort(new Document("age", -1)).forEach((Block<? super Document>) System.out::println);
//    }
//
//
//    /**
//     * 分页查找  类似于Stream中的skip和limit
//     */
//    @Test
//    public void test10() {
//        t_user.find().sort(new Document("age", 1)).skip(2).limit(2)
//                .forEach((Block<? super Document>) System.out::println);
//    }
//
//
//    /**
//     * 添加若干条数据
//     */
//    @Test
//    public void insertSomeDocuments() {
//        List<Document> list = CollUtil.newArrayList();
//
//        IntStream.rangeClosed(1, 100).forEach(i -> {
//            Document document = new Document(new Dict().set("name", "zhangwuji" + i).set("age", i));
//            list.add(document);
//        });
//
//        t_user.insertMany(list);
//    }
//
//
//    @After
//    public void after() {
//        System.out.println("**********************************************************");
//        mongoClient.close();
//    }
//}
